package com.yuntai.pms.model.api;

import com.yuntai.pms.model.dto.system.FunctionQueryDto;
import com.yuntai.pms.model.dto.system.MenuDto;
import com.yuntai.pms.model.entity.system.Function;
import com.yuntai.pms.model.entity.system.PlatformType;
import com.yuntai.pms.model.param.PageParam;
import com.yuntai.pms.model.result.PageResult;
import com.yuntai.pms.model.vo.system.FunctionVo;

import java.util.Collection;
import java.util.List;

/**
 * @ClassName: FunctionService
 * @Description: 提供对菜单Function CURD操作的接口
 * @author caijg@hsyuntai.com
 * @date 2017年8月29日 上午10:29:51
 */
public interface FunctionService {
	
	/**
	 * @Title: getFunctionsByDto
	 * @Description: 根据Dto信息返回Function列表
	 * @param dto
	 * @return
	 */
	PageResult<Function> getFunctionsByDto(FunctionQueryDto dto);
	
	/**
     * @Title: insertFunctionSelective
     * @Description: 新增Function
     * @param func
     */
	void insertFunctionSelective(Function func);
	
	/**
     * @Title: updateByPrimaryKeySelective
     * @Description: 通过主键Id更新Function
     * @param func
     * @return
     */
	void updateFunctionSelective(Function func);
	
	/**
	 * @Title: deleteFunctionsByPrimaryKey
	 * @Description: 通过ID数组批量删除Function
	 * @param ids
	 * @return
	 */
	int deleteFunctionsByPrimaryKey(Long[] ids);
	
	/**
	 * @Title: deleteFucntionByCode
	 * @Description: 通过唯一索引code删除
	 * @param id
	 * @return
	 */
	int deleteFucntionByCode(String id);
	
	/**
     * @Title: getPlatformTypeList
     * @Description: 返回平台列表数据，在PlatformTypeEnums中扩展
     * @param dto
     */
	PageResult<PlatformType> getPlatformTypeList(PageParam dto);
	
	/**
     * @Title: isExistCode
     * @Description: 根据code判断是否存在Function
     * @param code
     */
	boolean isExistCode(String code);

	/**
	 * @Title: getFunctionList
	 * @Description: 根据角色ID返回权限菜单列表
	 * @param roleId（可选）
	 * @param platformType
	 * @return
	 */
	PageResult<FunctionVo> getFunctionList(Long roleId, String platformType);

	/**
	 * @Title: roleAuthorize
	 * @Description: 给角色授权
	 * @param roleId
	 * @param ids：function id数组
	 */
	void roleAuthorize(Long roleId, Long[] ids);

	/**
	 * @Title: cleanDisabledAuthority
	 * @Description: 去除权限
	 * @param roleId
	 * @param ids
	 */
	void cleanDisabledAuthority(Long roleId, Long[] ids);

	/**
	 * @Title: isAvailableCode
	 * @Description: 判断code是否可用
	 * @param id
	 * @param code
	 * @return
	 */
	boolean isAvailableCode(Long id, String code);

	/**
	 * @param isSuper 
	 * @Title: getMenuList
	 * @Description: 根据用户Id查询该用户在某平台下的权限菜单
	 * @param userId
	 * @param platformType
	 * @return
	 */
	Collection<MenuDto> getMenuList(boolean isSuper, Long userId, String platformType);

	/**
	 * @Title: processToObj
	 * @Description: 将Function封装成有父子层级的对象集合（只限两层）
	 * @param list
	 * @return
	 */
	Collection<MenuDto> processToObj(List<? extends Function> list);

	/**
	 * @Title: getFunctionsByPlatform
	 * @Description: 查询某平台下的所有菜单
	 * @param platformType
	 * @return
	 */
	List<FunctionVo> getFunctionsByPlatform(String platformType);


	/**
	 * @Author maoze@hsyutai.com
	 * @Description  没有目录类型区分
	 * @Date 16:28 2019/1/18
	 * @Param [isSuper, userId]
	 * @return java.util.Collection<com.hiap.amp.platform.model.dto.system.MenuDto>
	 **/
	Collection<MenuDto> getMenuListNoType(boolean isSuper, Long userId);


	/**
	 * @Author maoze@hsyutai.com
	 * @Description 菜单的ztree查询
	 * @Date 15:59 2019/1/28
	 * @Param [roleId, platformType]
	 * @return com.hiap.amp.platform.model.result.PageResult<com.hiap.amp.platform.model.vo.system.FunctionVo>
	 **/
	List<FunctionVo> getFunctionListByRoleId(Long roleId);
}
